package com.rankeiot.core;

import com.rankeiot.core.config.IConfigService;
import com.rankeiot.core.util.castor.BooleanCastor;
import com.rankeiot.core.util.castor.LongCastor;

import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 配置管理
 */
public class Config {
    static Map<String, String> configMap = new ConcurrentHashMap<>();
    static IConfigService configService;
//    static {
//        Aop.getAsyn(IConfigService.class, bw -> {
//            configService = bw.get();
//            loadConfig();
//        });
//    }

    public static void init(IConfigService configService) {
        Config.configService = configService;
        loadConfig();
    }

    public static void loadConfig() {
        configMap.putAll(configService.loadAll());
        //
//       for(List<ConfigItemMeta> metaList: ConfigManager.getMetas().values()){
//           for(ConfigItemMeta meta:metaList){
//             if(StringUtil.isNotEmpty(meta.getDefaultValue())){
//                 String sn= meta.getSn();
//                 if(!configMap.containsKey(sn)){
//                     configMap.put(sn,meta.getDefaultValue());
//                 }
//             }
//           }
//       }
    }

    public static Long getLong(String name) {
        return LongCastor.instance.cast(getStr(name));
    }

    public static Boolean getBool(String name) {
        return BooleanCastor.instance.cast(getStr(name));
    }

    public static String getStr(String name) {
        //loadConfig();
        return configMap.get(name);
    }

    public static boolean saveConfig(String key, String value) {
        String oldValue = configMap.get(key);
        if (Objects.equals(value, oldValue)) {
            return false;
        }
        configService.saveConfig(key, value);
        configMap.put(key, value);
        return true;
    }

    public static Map<String, String> configMap() {
        // loadConfig();
        return configMap;
    }
}
